En esta práctica vamos a trabajar con una muestra de la base de datos Puntaje Crediticio, y podemos consultar el contexto de dichos datos haciendo clic en este enlace.
¿Qué aprenderemos?
## Cargamos librerías
library("tidyverse")
library("skimr")
library("summarytools")
library("modeest")
library("ggpubr")
## Lectura
library("readxl")
read_xlsx(
path = "data/Puntaje-Crediticio.xlsx",
sheet= "DB"
) -> data_raw
## Revisar la estructura de los datos
str(data_raw)
## Transformamos el ID como una variable tipo char
data_raw$ID <- as.character(data_raw$ID)
## Convertimos variables respectivas a factores
factores <- c("Gender", "Has a car", "Has a property", "Employment status",
"Education level", "Marital status", "Dwelling", "Has a mobile phone", "Has a work phone",
"Has a phone", "Has an email", "Job title", "Is high risk")
data_raw %>% mutate_at(factores,factor) -> data
## Revisamos que la estructura de los datos esté ajustada
str(data)
## Advertencia:
## Una vez la estructura está ajustada hay que hacer limpieza de datos
## Vamos a seguir el procesamiento con fines pedagógicos# Univariados
mean() # para la media
median() #para la mediana
modeest::mfv() # para la moda
var() # para la varianza
sd() # para la desviación estándar
max() # para el máximo
min() # para el mínimo
quantile() # para los cuartiles
IQR() # para el rango intercuartílico
# Multivariados
cov() # para la covarianza
cor() # para la correlación
table() # para tablas de contingencia - también sirve en una variable## [1] 185867.2
## [1] 157500
## [1] 10670152781
## [1] 103296.4
## [1] 1575000
## [1] 27000
## 0% 25% 50% 75% 100%
## 27000 117000 157500 225000 1575000
## [1] 108000
## [1] Secondary / secondary special
## 5 Levels: Academic degree Higher education ... Secondary / secondary special
##
## Academic degree Higher education
## 7 1954
## Incomplete higher Lower secondary
## 281 76
## Secondary / secondary special
## 4974
##
## Academic degree Higher education
## 0.0009599561 0.2679648930
## Incomplete higher Lower secondary
## 0.0385353812 0.0104223807
## Secondary / secondary special
## 0.6821173889
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 27000 117000 157500 185867 225000 1575000
## ID Gender Has a car Has a property Children count
## Length:7292 F:4881 0:4486 0:2343 Min. : 0.0000
## Class :character M:2411 1:2806 1:4949 1st Qu.: 0.0000
## Mode :character Median : 0.0000
## Mean : 0.4284
## 3rd Qu.: 1.0000
## Max. :14.0000
##
## Income Employment status
## Min. : 27000 Commercial associate:1689
## 1st Qu.: 117000 Pensioner :1232
## Median : 157500 State servant : 604
## Mean : 185867 Student : 4
## 3rd Qu.: 225000 Working :3763
## Max. :1575000
##
## Education level Marital status
## Academic degree : 7 Civil marriage : 633
## Higher education :1954 Married :5004
## Incomplete higher : 281 Separated : 391
## Lower secondary : 76 Single / not married: 965
## Secondary / secondary special:4974 Widow : 299
##
##
## Dwelling Has a mobile phone Has a work phone Has a phone
## Co-op apartment : 41 1:7292 0:5612 0:5147
## House / apartment :6489 1:1680 1:2145
## Municipal apartment: 216
## Office apartment : 54
## Rented apartment : 122
## With parents : 370
##
## Has an email Job title Family member count Account age
## 0:6654 Laborers :1207 Min. : 1.000 Min. : 0.00
## 1: 638 Core staff : 725 1st Qu.: 2.000 1st Qu.:12.00
## Sales staff: 712 Median : 2.000 Median :24.00
## Managers : 590 Mean : 2.202 Mean :26.27
## Drivers : 416 3rd Qu.: 3.000 3rd Qu.:39.00
## (Other) :1346 Max. :15.000 Max. :60.00
## NA's :2296
## Is high risk
## 0:7175
## 1: 117
##
##
##
##
##
Normalmente estas funciones no trabajan si encuentran datos perdidos, para eliminar esta restricción se usa
| Name | data |
| Number of rows | 7292 |
| Number of columns | 18 |
| _______________________ | |
| Column type frequency: | |
| character | 1 |
| factor | 13 |
| numeric | 4 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| ID | 0 | 1 | 7 | 7 | 0 | 7292 | 0 |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| Gender | 0 | 1.00 | FALSE | 2 | F: 4881, M: 2411 |
| Has a car | 0 | 1.00 | FALSE | 2 | 0: 4486, 1: 2806 |
| Has a property | 0 | 1.00 | FALSE | 2 | 1: 4949, 0: 2343 |
| Employment status | 0 | 1.00 | FALSE | 5 | Wor: 3763, Com: 1689, Pen: 1232, Sta: 604 |
| Education level | 0 | 1.00 | FALSE | 5 | Sec: 4974, Hig: 1954, Inc: 281, Low: 76 |
| Marital status | 0 | 1.00 | FALSE | 5 | Mar: 5004, Sin: 965, Civ: 633, Sep: 391 |
| Dwelling | 0 | 1.00 | FALSE | 6 | Hou: 6489, Wit: 370, Mun: 216, Ren: 122 |
| Has a mobile phone | 0 | 1.00 | FALSE | 1 | 1: 7292 |
| Has a work phone | 0 | 1.00 | FALSE | 2 | 0: 5612, 1: 1680 |
| Has a phone | 0 | 1.00 | FALSE | 2 | 0: 5147, 1: 2145 |
| Has an email | 0 | 1.00 | FALSE | 2 | 0: 6654, 1: 638 |
| Job title | 2296 | 0.69 | FALSE | 18 | Lab: 1207, Cor: 725, Sal: 712, Man: 590 |
| Is high risk | 0 | 1.00 | FALSE | 2 | 0: 7175, 1: 117 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| Children count | 0 | 1 | 0.43 | 0.74 | 0 | 0 | 0 | 1 | 14 | ▇▁▁▁▁ |
| Income | 0 | 1 | 185867.23 | 103296.43 | 27000 | 117000 | 157500 | 225000 | 1575000 | ▇▁▁▁▁ |
| Family member count | 0 | 1 | 2.20 | 0.91 | 1 | 2 | 2 | 3 | 15 | ▇▁▁▁▁ |
| Account age | 0 | 1 | 26.27 | 16.56 | 0 | 12 | 24 | 39 | 60 | ▇▇▆▅▃ |
## Descriptive Statistics
## data
## N: 7292
##
## Account age Children count Family member count Income
## ----------------- ------------- ---------------- --------------------- ------------
## Mean 26.27 0.43 2.20 185867.23
## Std.Dev 16.56 0.74 0.91 103296.43
## Min 0.00 0.00 1.00 27000.00
## Q1 12.00 0.00 2.00 117000.00
## Median 24.00 0.00 2.00 157500.00
## Q3 39.00 1.00 3.00 225000.00
## Max 60.00 14.00 15.00 1575000.00
## MAD 20.76 0.00 0.00 66717.00
## IQR 27.00 1.00 1.00 108000.00
## CV 0.63 1.74 0.41 0.56
## Skewness 0.28 2.48 1.25 2.67
## SE.Skewness 0.03 0.03 0.03 0.03
## Kurtosis -1.05 17.68 6.34 15.01
## N.Valid 7292.00 7292.00 7292.00 7292.00
## Pct.Valid 100.00 100.00 100.00 100.00
Presenta los valores de una variable para cada observación usando símbolos, y cada observación se grafica de manera relativa al número de la observación.
Es un tipo de gráfica de barras que muestra conteos o frecuencias relativas de valores que caen en diferentes intervalos.
Podemos cambiar el número de barras usando el parámetro breaks
Muestra las frecuencias relativas locales de los puntos a lo largo del eje X. En otras palabras, en los intervalos donde hay más puntos/observaciones la gráfica crece indicando mayor “densidad”.
Los gráficos de densidad son muy útiles para determinar la función de distribución de probabilidad de una variable cuantitativa.
Se usa para revisar si los datos siguen una distribución aproximadamente normal.
Muestra la frecuencia relativa acumulada para los valores de la muestra.
Muestra la ubicación, dispersión y distribución de una variable mediante la construcción de una figura en forma de caja con un conjunto de líneas (bigotes) que se extienden desde los extremos de la caja. Los bordes del cuadro se dibujan en los percentiles 25 y 75 de los datos, y una línea en el medio del cuadro marca el percentil 50.
Nota: en ciencia de datos cuando las variables de la base de datos son cuantitativas se les suele llamar variables contínuas, y en estos casos los tipos de gráficos que más se usan son los histogramas y los boxplots. Para variables cualitativas, a las que se le suele llamar variables categóricas, estas usualmente se representan mediante tablas de contingencia, diagramas de barras o diagramas de torta.
library("corrplot")
variables_seleccionadas <- c("Income","Family member count","Account age","Children count")
data[variables_seleccionadas] -> variables_numericas
variables_numericas %>%
cor %>%
corrplot.mixed(lower = "number", upper = "color", lower.col = "#aaaaaa", number.cex = 0.6, tl.cex = 0.6)